引入
我们经常使用字符串,printf 中 " " 双引号之间
的内容可以直接输出,如今我们学习了指针的概念,通过指针来引用字符串,可以更加灵活和方便。
如何引用字符串?
我们知道,在 C 语言中,字符串是存放在数组中的,想要引用一个字符串,可以有一下两种方法:
用字符数组存放一个字符串
1 |
|
我们可以在printf 中用 %s 输出
,也可以通过数组名和下标
方式引用该字符串。
注意
上面定义字符串数组的时候,没有声明数组大笑,Hello 是5个字符,但实际上字符串数组是6位,因为还有一个\0
在最后。
用字符指针变量输出一个字符串
我们知道如何用指针变量输出数组的元素,既然字符串也是一个特殊的数组,那么我们同样可以用输出数组元素的方式输出字符串。
1 |
|
我们看到,指针变量就可以直接赋值字符串,并且再输出的时候和字符串数组一样使用,同样是首地址
即可输出。
对于直接用字符串给指针变量初始化,其实字符串也是以数组的形式存储在内存中的,由于
没有数组名,我们只能通过地址来找到它,或者是指针变量
。
字符指针变量的运行机制
上面我们声明了一个字符指针变量,并且用Hello
初始化了该字符指针变量,如下:
1 | char *str="Hello"; |
上面的定义及初始化,可以等同于下面:
1 | char *str; //定义了一个字符指针变量 str |
我们知道,指针是存放地址的。所以,上面我们用Hello
给指针变量初始化的时候,并不是把这个字符串存储到 str 之中,而是把 Hello 中第一个字符的地址传送给 str
,所以:
1 |
|
输出结果是:
H
这就证实了,其实 str 里面存储的就只有 Hello 这个首字母的地址而已,我们没有办法通过下标去引用,但是我们可以通过移动指针的方式去引用。
例子
将字符串 a 的内容复制到 b 中,并且用不同的方法引用 a 和 b 的字符。
1 |
|
我们通过将数组中的字符,转换为指针格式,并且通过指针的移动,遍历字符串。
注意:上面的
\0
使用的是单引号。
如果,我们将上述问题,改为指针变量的方式,可以这么写:
1 |
|
我们也可以使用指针变量赋值的方式来复制 a 字符串。
1 |
|
我们利用指针的移动,来完成复制,这里特别需要注意的是,将 a 赋值给 pointer_a 时,过去的是地址,指针变量的地址会随着指针而移动,所以我们在第 10 行,重新让pointer_b=b
, 就是为了让指针归位,否则输出的内容不可预知。
尾巴
这是我的个人学习笔记,主要是应付考研复习使用,充斥着一些吐槽和个人观点,并不严谨,欢迎大家参考、指正。